const Koa = require("koa");
const app = new Koa();
const views = require("koa-views");
const json = require("koa-json");
const onerror = require("koa-onerror");
const bodyparser = require("koa-bodyparser");
const logger = require("koa-logger");
const router = require("koa-router")();
const index = require("./routes/index");
const user = require("./routes/users");
const role = require("./routes/roles");
const dept = require("./routes/dept")
const menu = require("./routes/menu")
// error handler
onerror(app);
require("./config/db");
// middlewares
app.use(
  bodyparser({
    enableTypes: ["json", "form", "text"],
  })
);
app.use(json());
app.use(logger());
app.use(require("koa-static")(__dirname + "/public"));

app.use(
  views(__dirname + "/views", {
    extension: "pug",
  })
);

// logger
app.use(async (ctx, next) => {
  const start = new Date();
  await next();
  // @ts-ignore
  const ms = new Date() - start;
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});
router.prefix("/api"); //所有接口的前缀

// routes
router.use(user.routes(), user.allowedMethods()); //user路由的中间件
router.use(role.routes(), role.allowedMethods());
router.use(dept.routes(), dept.allowedMethods());
router.use(menu.routes(), menu.allowedMethods());
app.use(router.routes(), router.allowedMethods());

// error-handling
app.on("error", (err, ctx) => {
  console.error("server error", err, ctx);
});

module.exports = app;
